/// @tags: NTT EGF
#include <cstdio>
#include <iostream>

using namespace std;

namespace BlueQuantum {

typedef long long ll;

ll qpow(ll, int);

int const N = 2e5 + 5, M = 1 << 19, P = 924844033, G = 5, IG = qpow(G, P - 2);

struct Edge {
  int v, nxt;
} e[N << 1];

int n, e_cnt;
int heads[N], siz[N], fac[N], inv[N], f[M], g[M], cvt[M];

inline ll qpow(ll base, int exp) {
  ll res = 1;
  while (exp) {
    if (exp & 1) res = res * base % P;
    exp >>= 1;
    base = base * base % P;
  }
  return res;
}

inline void add(int u, int v) {
  e[++e_cnt].v = v, e[e_cnt].nxt = heads[u], heads[u] = e_cnt;
}

void dfs(int x, int fa) {
  siz[x] = 1;
  for (int i = heads[x], v; i; i = e[i].nxt) {
    if ((v = e[i].v) != fa) {
      dfs(v, x);
      if ((f[siz[v]] += 1) >= P) f[siz[v]] -= P;
      if ((f[n - siz[v]] += 1) >= P) f[n - siz[v]] -= P;
      siz[x] += siz[v];
    }
  }
}

inline void prework() {
  fac[0] = 1;
  for (int i = 1; i <= n; ++i) fac[i] = (ll)fac[i - 1] * i % P;
  inv[n] = qpow(fac[n], P - 2);
  for (int i = n - 1; i >= 0; --i) inv[i] = (ll)inv[i + 1] * (i + 1) % P;
}

inline ll C(int n, int m) {
  if (n < m) return 0;
  return (ll)fac[n] * inv[m] % P * inv[n - m] % P;
}

inline void NTT(int *const f, bool typ, int n) {
  for (int i = 1; i < n; ++i)
    if (i < cvt[i]) std::swap(f[i], f[cvt[i]]);
  for (int i = 2; i <= n; i <<= 1) {
    int mid = i >> 1, wn = qpow(typ ? G : IG, (P - 1) / i);
    for (int j = 0; j < n; j += i) {
      ll wk = 1;
      for (int k = 0; k < mid; ++k, wk = (wk * wn) % P) {
        ll t = wk * f[j + k + mid] % P;
        if ((f[j + k + mid] = f[j + k] - t) < 0) f[j + k + mid] += P;
        if ((f[j + k] += t) >= P) f[j + k] -= P;
      }
    }
  }
  if (!typ) {
    ll inv = qpow(n, P - 2);
    for (int i = 0; i < n; ++i) f[i] = inv * f[i] % P;
  }
}

inline int main() {
  cin >> n;
  for (int i = 1, x, y; i < n; ++i) {
    cin >> x >> y;
    add(x, y);
    add(y, x);
  }
  prework();
  dfs(1, 1);
  int maxl = 1;
  while (maxl < n << 1) maxl <<= 1;
  for (int i = 1; i < maxl; ++i) cvt[i] = cvt[i >> 1] >> 1 | (i & 1) * (maxl >> 1);
  for (int i = 1; i <= n; ++i) f[i] = (ll)f[i] * fac[i] % P, g[maxl - i] = inv[i];
  g[0] = inv[0];
  NTT(f, true, maxl), NTT(g, true, maxl);
  for (int i = 0; i < maxl; ++i) f[i] = (ll)f[i] * g[i] % P;
  NTT(f, false, maxl);
  for (int i = 1; i <= n; ++i) f[i] = (ll)f[i] * inv[i] % P;
  for (int i = 1; i <= n; ++i) cout << (n * C(n, i) % P - f[i] + P) % P << '\n';
  return 0;
}

}  // namespace BlueQuantum

int main() {
#ifndef ONLINE_JUDGE
#ifdef LOCAL
  freopen("/tmp/CodeTmp/testdata.in", "r", stdin);
  freopen("/tmp/CodeTmp/testdata.out", "w", stdout);
#else
  freopen("AT2064 [AGC005F] Many Easy Problems.in", "r", stdin);
  freopen("AT2064 [AGC005F] Many Easy Problems.out", "w", stdout);
#endif
#endif

  ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  return BlueQuantum::main();
}
